package com.yunhe.abnormal.service.base;

import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.exception.ObjectNotFoundException;
import com.yunhe.common.exception.UniqueConstraintsException;
import com.yunhe.common.model.PageParam;
import com.yunhe.common.model.base.AlarmTypeDTO;

import java.util.List;

/**
 * 异常类型Service
 * @author liuronglei
 */
public interface AlarmTypeService {

    /**
     * 新增异常类型对象
     * @param alarmType 异常类型对象
     */
    AlarmTypeDTO create(AlarmTypeDTO alarmType) throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 根据ID获得异常类型对象
     * @param id 对象ID
     */
    AlarmTypeDTO findById(Long id);

    /**
     * 根据标题获得异常类型对象
     * @param title 标题
     */
    AlarmTypeDTO findByTitle(String title);

    /**
     * 根据ID删除异常类型对象
     * @param id 对象ID
     */
    void deleteById(Long id);

    /**
     * 更新异常类型对象
     * @param id 对象ID
     * @param title 异常类型标题
     * @param desc 异常类型描述
     */
    AlarmTypeDTO update(Long id, String title, String desc) throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 更新异常类型对象
     * @param alarmType 异常类型
     */
    AlarmTypeDTO update(AlarmTypeDTO alarmType) throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 根据ID列表批量删除异常类型对象
     * @param ids 对象ID列表
     */
    void batchDelete(List<Long> ids);

    /**
     * 根据条件获得异常类型对象
     * @param queryStr 查询关键字
     * @param dtime 维护时间
     * @param pageParam 分页对象
     */
    Iterable<AlarmTypeDTO> search(String queryStr,
                                  List<String> dtime,
                                  PageParam pageParam);

    /**
     * 已绑定的异常类型ID列表
     * @param ids 对象ID列表
     */
    List<Long> getBoundRule(List<Long> ids);

}
